<?php

/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
error_reporting(E_ALL ^ E_NOTICE);
/**
 * 用于检测业务代码死循环或者长时间阻塞等问题
 * 如果发现业务卡死，可以将下面declare打开（去掉//注释），并执行php start.php reload
 * 然后观察一段时间workerman.log看是否有process_timeout异常
 */
//declare(ticks=1);
//header("Content-Type:text/html;charset=utf8");
use \GatewayWorker\Lib\Gateway;
require_once "play.php";
use xf\Play;
use \Workerman\Http\Client;
/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class Events
{

    /**
     * 进程启动后初始化数据库连接
     */
    public static function onWorkerStart($businessWorker)
    {
        //官方异步客户端 body处慎用var_dump
        $http = new Client();

        //业务代码
        $play = new Play();

        //只在id编号为0的进程上设置定时器。
        if ($businessWorker->id === 0) {
            //重启时将所有设备下线 可能会导致启动失败
//            $http->get($play->url . '/api/awork/close_all', function ($response) {
//                $body = $response->getBody();
//                $res = json_decode($body, true);
//                var_dump($res);
//
//            }, function ($exception) {
//                echo $exception;
//            });
            var_dump("start 。。。。。。。。。。。。");
        }
    }
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {

    }

    /**
     * 当客户端发来消息时触发
     * @param int $client_id 连接id
     * @param mixed $message 具体消息
     */
    public static function onMessage($client_id, $message)
    {
        //直接插入临时数据
        var_dump("receive  message----");

//        //官方异步客户端 body处慎用var_dump
//        $http = new \Workerman\Http\Client();
//
//        //业务代码
//        $play = new Play();
//
//        //接受到的消息
//        $new_msg = json_decode($message, true);
//
//        $http->post($play->url."/api/awork/new_ls_data", ['time'=>time(),'data'=>json_encode($new_msg)], function($response){
//            $body = $response->getBody();
//            $res = json_decode($body, true);
//            var_dump($res);
//        }, function($exception){
//            echo $exception;
//        });
//
//
//        //来自web端和手机端的命令：
//        if ($_SERVER['GATEWAY_PORT'] == 65510) {
//
//            if($new_msg['type'] && $new_msg['type'] == 'ping'){
//
//            }else{
//
//                //uid 是web端，手机端发送的一个写死的uid
//                $uid = Gateway::getUidByClientId($client_id);
//                if(!$uid){
//                    Gateway::bindUid($client_id, $new_msg['uid']);
//                    var_dump('bind_web');
//                }
//
//                //  发送命令到web和手机端
//                Gateway::sendToUid($new_msg['uid'], 'success');
//
//                // 发送命令道指定大棚
//                Gateway::sendToUid($new_msg['gateway_id'], json_encode($new_msg['data']));
//            }
//
//        }
//
//
//        //大棚硬件发来的消息
//        if($_SERVER['GATEWAY_PORT'] == 65520){
//
//            //绑定uid
//            $uid = Gateway::getUidByClientId($client_id);
//            if (!$uid) {
//                Gateway::bindUid($client_id, $new_msg['gateway_id']);
//                var_dump('bind_dapeng');
//            }
//
//            switch ($new_msg['type']){
//
//                case 5:
//                    //设备状态数据上传
//                    Gateway::sendToClientId($client_id,"case 5555555555555555");
//                case 3:
//                    //设备定时上传数据
//                    $http->post($play->url."/api/awork/dev_msg", ['data'=>json_encode($new_msg)], function($response){
//                        $body = $response->getBody();
//                        $res = json_decode($body, true);
//                        var_dump($res);
//                    }, function($exception){
//                        echo $exception;
//                    });
//                case 'ping':
//                    //设备状态数据上传
//                    Gateway::sendToClientId($client_id,json_encode($new_msg));
//
//            }
//
//
//
//        }



    }

    /**
     * 当用户断开连接时触发
     * @param int $client_id 连接id
     */
    public static function onClose($client_id)
    {
        var_dump($client_id . "logout");
    }
}
